package com.qymerge.manage.system.service;

import com.qymerge.manage.core.bean.ActionResultRO;
import com.qymerge.manage.core.bean.DataTableRO;
import com.qymerge.manage.core.bean.PageRequest;
import com.qymerge.manage.core.bean.ReturnMap;
import com.qymerge.manage.system.dto.SysRoleDTO;
import com.qymerge.manage.system.dto.SysUserDTO;
import com.qymerge.manage.system.dto.SysUserSnapDTO;
import com.qymerge.manage.system.ro.SysMenuRO;
import com.qymerge.manage.system.ro.SysMenuRoleRO;
import com.qymerge.manage.system.ro.SysRoleRO;
import com.qymerge.manage.system.ro.SysUserRO;

import java.util.List;


/**
 * <p>Title: ISystemService</p>
 * <p>Description: </p>
 *
 * @Author cong.zhang
 * @Version 1.0.0
 * @Date 2020/7/27/0027
 * @Time 10:57
 */
public interface ISystemService {

    /**
     * 后台管理系统-用户管理-查询
     *
     * @param sysUser
     * @return
     */
    DataTableRO getSysUserList(SysUserRO sysUser, PageRequest pageRequest);

    /**
     * 后台管理系统-用户管理-新增
     *
     * @param sysUser
     * @return
     */
    ActionResultRO saveSysUser(SysUserRO sysUser);

    /**
     * 后台管理系统-用户管理-修改
     *
     * @param sysUser
     * @return
     */
    ActionResultRO editSysUser(SysUserRO sysUser);

    /**
     * 后台管理系统-用户管理-批量删除
     *
     * @param ids
     * @return
     */
    ActionResultRO delSysUser(Long[] ids);

    /**
     * 后台管理系统-菜单查询
     *
     * @return
     */
    List getSysMenuList();

    /**
     * 获取指定菜单
     *
     * @param sysMenu
     * @return
     */
    SysMenuRO getSysMenu(SysMenuRO sysMenu);

    /**
     * 后台管理系统-新增菜单
     *
     * @param sysMenu
     * @return
     */
    ActionResultRO saveSysMenu(SysMenuRO sysMenu);

    /**
     * 后台管理系统-编辑菜单
     *
     * @param sysMenu
     * @return
     */
    ActionResultRO editSysMenu(SysMenuRO sysMenu);

    /**
     * 后台管理系统-删除菜单
     *
     * @param id
     * @return
     */
    ActionResultRO delSysMenu(Long id);

    /**
     * 后台管理系统-角色查询
     *
     * @param sysRole
     * @return
     */
    DataTableRO getSysRoleList(SysRoleRO sysRole, PageRequest pageRequest);

    /**
     * 后台管理系统-新增角色
     *
     * @param roleDto
     * @return
     */
    ActionResultRO saveSysRole(SysRoleDTO roleDto);

    /**
     * 后台管理系统-修改角色
     *
     * @param roleDto
     * @return
     */
    ActionResultRO editSysRole(SysRoleDTO roleDto);

    /**
     * 后台管理系统-删除角色
     *
     * @param ids
     * @return
     */
    ActionResultRO delSysRole(Long ids[]);

    /**
     * 根据角色id获取菜单角色记录
     *
     * @param sysRole
     * @return
     */
    List<SysMenuRoleRO> getMenuRoleById(SysRoleRO sysRole);

    /**
     * 后台管理系统-根据用户id获取角色集合
     *
     * @param sysUser
     * @return
     */
    ActionResultRO getRolesByUserId(SysUserRO sysUser);

    /**
     * 后台管理系统-分配角色
     *
     * @param userDto
     * @param pageRequest
     * @return
     */
    ActionResultRO editUserRole(SysUserDTO userDto, PageRequest pageRequest);


    /**
     * 获取页面头部菜单导航
     *
     * @param menuId
     * @return
     */
    ReturnMap showMenuHead(Long menuId);

    /**
     * 系统用详细信息
     *
     * @param sysUser
     * @return
     */
    SysUserRO getSysUser(Long userId);

    SysUserRO getSysUser(SysUserRO sysUser);

    /**
     * 根据用户ID获取角色信息
     *
     * @param userId
     * @return
     */
    SysRoleRO getRoleInfoByUserId(Long userId);

    /**
     * 根据角色获取用户
     *
     * @param roleName
     * @return
     */
    List<SysUserSnapDTO> getUserInfoByRoleName(String roleName);

    /**
     * 根据角色获取用户
     *
     * @param cnNames
     * @return
     */
    List<SysUserRO> getUserInfoByCnName(List<String> cnNames);

    /**
     * 更新是否启用
     *
     * @param id
     * @param status
     * @param desc
     * @return
     */
    ActionResultRO updateSysUserStatus(long id, int status, String desc);


}
